package main.leetcode.offer.firstround.from03to50;

import java.util.Arrays;

/**
 * 21.调整数组顺序使奇数位于偶数前面
 *
 * <p>输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有奇数位于数组的前半部分，所有偶数位于数组的后半部分。
 *
 * <p>
 *
 * <p>示例：输入：nums = [1,2,3,4] 输出：[1,3,2,4] 注：[3,1,2,4] 也是正确的答案之一。
 *
 * <p>提示：1 <= nums.length <= 50000 1 <= nums[i] <= 10000
 *
 * <p>来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class ex21 {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(new ex21().exchange(new int[] {1, 2, 2, 3, 4})));
    }

    public int[] exchange(int[] nums) {
        int n = nums.length;
        int i = 0, j = n - 1;
        while (i < j) {
            while (i < j && (nums[i] & 1) == 1) i++; // 左指针碰到奇数，右移
            while (i < j && (nums[j] & 1) == 0) j--; // 右指针碰到双数，左移
            if (i >= j) break;
            int t = nums[i];
            nums[i] = nums[j];
            nums[j] = t;
        }
        return nums;
    }
}
